/* License Notice:
**
** This program is free software: you can redistribute it and/or modify
**    it under the terms of the GNU General Public License as published by
**    the Free Software Foundation, either version 3 of the License, or
**    (at your option) any later version.
** This program is distributed in the hope that it will be useful,
**   but WITHOUT ANY WARRANTY; without even the implied warranty of
**   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
**   GNU General Public License for more details.
** You should have received a copy of the GNU General Public License
**   along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

/**
 * @file config.h
 * @author TooOld2Rock'nRoll
 * @date 2023/09/22
 * @brief Global information about the engine environment initial state.
 * @warning Changing any of the following values requires the library to be recompiled to take effect!
 * @todo Most of these values should go to a config.xml file, so it can change without recompiling the library.
 */
#ifndef _INPUT_H_
#define _INPUT_H_

#ifdef __cplusplus
extern "C" {
#endif

/*---- Definitions ----*/
//THIS IS VERY BAD!!! SHOULD NOT EXIST!!!!
#define GROUND_LEVEL_TEMP    1000
#define GRAVITY_TEMP         1300 //pixels/sec
//END OF VERY BAD!!!!

/**@{ Library */
///Unable/Disable debug messages, options are [<b>true</b> | <b>false</b>]
#define ENABLE_DEBUG    true
///Which debug message level to show, options are [VERBOSE < TRACE < INFO < WARNING < ERROR]
#define DEBUG_LEVEL     INFO

///Unable/Disable OpenGl error messages, options are [<b>true</b> | <b>false</b>]
#define ENABLE_OPENGL_DEBUG true
///Which debug message level to show, options are [GL_DEBUG_SEVERITY_NOTIFICATION < GL_DEBUG_SEVERITY_LOW < GL_DEBUG_SEVERITY_MEDIUM < GL_DEBUG_SEVERITY_HIGH]
#define DEBUG_OPENGL_LEVEL  GL_DEBUG_SEVERITY_LOW


///The key to load and access references to the library basic Shader
#define BASIC_SHADER_KEY "arcade_fighter_basic_shader"
///The key to load and access references to the library default Camera view
#define DEFAULT_CAMERA_KEY "arcade_fighter_default_camera"

///Default game loop style to use, options are [FIXED | VARIABLE | SEMI_FIXED | CHUNKY]
#define GAME_LOOP_STYLE ArcadeFighter::delta_time_style_e::FIXED

///Bound the game rendering <b>F</b>rames <b>Per</b> <b>S</b>econd to a set value. (ignored for VARIABLE game loop style)
#define GAME_MAX_FPS    30
///Bound the game loop logic handling to a set FPS. (only valid for CHUNKY game loop style)
#define GAME_LOGIC_FPS  120

///The minimum number of listeners the library expects to exist.
///Recommended at least 4 spaces for listeners [API & Level & Player_1 & Player_2]
#define MIN_EVENT_LISTENERS 4
/**@}*/


/**@{ Window */
///The decoration text of the window.
#define WINDOW_TITLE "Arcade Fighter Library for Linux :D"

///Width of the program window when started, if no other flags used.
#define START_WINDOW_WIDTH  460
///Height of the program window when started, if no other flags used.
#define START_WINDOW_HEIGHT 380
/**@}*/


/**@{ Graphics */
///The target major version for OpenGl Core
#define OPENGL_TARGET_MAJOR_VERSION     4
///The target minor version for OpenGl Core
#define OPENGL_TARGET_MINOR_VERSION     3

//A or list of image file formats stb_image.h is expected to handle.
//see stb_image.h <i>ADDITIONAL CONFIGURATION</i> for a comprehensive list.
///No Adobe Photoshop files.
#define STBI_NO_PSD
///No Truevision files.
#define STBI_NO_TGA
///No GIF files.
#define STBI_NO_GIF
///No High Dynamic Range files.
#define STBI_NO_HDR
///No Pictor files.
#define STBI_NO_PIC
///No Portable Any Map files.
#define STBI_NO_PNM
/**@}*/

/**@{ Audio */
///A or list of audio file formats SDL_Mixer is expected to handle besides wave.
///@see https://wiki.libsdl.org/SDL2_mixer/MIX_InitFlags
#define AUDIO_SUPPORTED_FORMATS     MIX_INIT_MP3 | MIX_INIT_FLAC
/**@}*/

/**@{ Players */
///The maximum number of players (human or otherwise) the game will be able to handle concurrently.
#define PLAYERS_COUNT   2
/**@}*/


/*---- Typedefs ----*/


/*---- Enumerations ----*/


/*---- Structures ----*/


/*---- Global Variables ----*/


/*---- Macros ----*/


#ifdef __cplusplus
} //extern "C"
#endif
#endif /* _INPUT_H_ */

